﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PresentacionWindows.Base;
using Negocio.Generico;
using Negocio.View;
using Integra.Comun;

namespace PresentacionWindows
{
    public partial class uscClase : UserControlBase
    {

        #region propiedades

        bool bEditando = false;

        #endregion

        #region Constructores,Inicializadores,etc

        public uscClase(PersonaDTO tokenUsuario)
        {
            this.TokenUsuario = tokenUsuario;
            InitializeComponent();
            DSToBinding();
        }

        #endregion

        #region Metodos privados

        /// <summary>
        /// Funcion que rellena los datos del control
        /// </summary>
        private void DSToBinding() 
        {
            #region Carga de combos

            //Carga de los valores del combo del listado de titularidades
            AsignaturaView obj = AsignaturaView.GetInstance();
            AsignaturaDTO filtroAsignaturas = new AsignaturaDTO();
            //El filtro siempre se hace en funcion de la persona. El token usuario
            //contiene el co_Persona de un profesor
            filtroAsignaturas.CoProfesor = this.TokenUsuario.CoProfesor;
            this.cboAsignatura.SelectedIndexChanged -= new System.EventHandler(this.cboAsignatura_SelectedIndexChanged);
            ControlDatos.CargarCombo(this.cboAsignatura, obj.GetAsignaturasViewByAsignatura(filtroAsignaturas), "NOMBRE", "CODIGOASIGNATURA", TipoCargaCombo.Normal);
            this.cboAsignatura.SelectedIndexChanged += new System.EventHandler(this.cboAsignatura_SelectedIndexChanged);

            this.cboAsignatura.SelectedItem = 0;

            #endregion


            #region Carga de asignaturas
          
            
            RecargaGrid();


            #endregion
        }

        /// <summary>
        /// Metodo que bloquea todos los controles en función del estado en el que nos encontremos
        /// </summary>
        /// <param name="estado">bit de control para el bloqueo</param>
        private void BloquearControles(bool estado)
        {
            this.txtNombreAlu.Enabled = estado;
            this.txtApellido1.Enabled = estado;
            this.txtApellido2.Enabled = estado;
            cboAsignatura.Enabled = estado;
            this.txtDNI.Enabled = estado;

            if (!bEditando)
            {
                txtNombreAlu.Text = "";
                txtApellido1.Text = "";
                txtApellido2.Text = "";
                txtDNI.Text = "";
                this.cboAsignatura.SelectedValue = 0;
            }
        }


        private void RecargaGrid()
        {
            AlumnoAsignaturaDTO filtro = new AlumnoAsignaturaDTO();
            filtro.CoAsignatura = Int32.Parse(this.cboAsignatura.SelectedValue.ToString());
            RecargaGrid(filtro);
        }

        /// <summary>
        /// Método que recarga el grid por completo 
        /// </summary>
        private void RecargaGrid(AlumnoAsignaturaDTO filtro)
        {
            try
            {
                AlumnoAsignaturaView vista = AlumnoAsignaturaView.GetInstance();
                AlumnoAsignaturaDTO dto;
                if (filtro == null)
                {
                    dto = new AlumnoAsignaturaDTO();
                }
                else
                {
                    dto = filtro;
                }
                this.grdAlumnos.DataSource = null;
                this.grdAlumnos.DataSource = vista.GetViewAlumnosAsignatura(dto);
                this.grdAlumnos.Refresh();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }

        /// <summary>
        /// Borra los controles
        /// </summary>
        public void BorrarControles()
        {
            this.txtApellido1.Text = "";
            this.txtApellido2.Text = "";
            this.txtNombreAlu.Text = "";
            this.txtDNI.Text = "";
        }


        #endregion


        #region Eventos

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            this.Cursor = System.Windows.Forms.Cursors.WaitCursor;
            try
            {
                frmSeleccionAlumno frm = new frmSeleccionAlumno(Int32.Parse(this.cboAsignatura.SelectedValue.ToString()));
                frm.Show();
                if (frm.DialogResult == DialogResult.OK)
                {
                    RecargaGrid();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error mostrando el listado de los alumnos.Excepcion: "+ ex.Message);
            }
            this.Cursor = System.Windows.Forms.Cursors.Default;
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            bEditando = true;
            BloquearControles(true);
        }


        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {

            }
            catch (Exception ex)
            {

                MessageBox.Show("Error al guardar los cambios.Error:" + ex.Message);
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            try
            {

            }
            catch (Exception ex)
            {

                MessageBox.Show("Error al cancelar.Error: " + ex.Message);
            }
        }

        #endregion

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                AlumnoAsignaturaDTO filtro = new AlumnoAsignaturaDTO();
                filtro.Nombre = this.txtNombreAlu.Text;
                filtro.Apellido1 = this.txtApellido1.Text;
                filtro.Apellido2 = this.txtApellido2.Text;
                filtro.CoAsignatura = Int32.Parse(this.cboAsignatura.SelectedValue.ToString())!=0?Int32.Parse(this.cboAsignatura.SelectedValue.ToString()):Int32.MinValue;
                filtro.DNI = this.txtDNI.Text;
                RecargaGrid(filtro);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en la busqueda del alumno. Error: " + ex.Message);
            }
        }


        private void btnBorrar_Click(object sender, EventArgs e)
        {
            BorrarControles();
        }

        private void cboAsignatura_SelectedIndexChanged(object sender, EventArgs e)
        {
            RecargaGrid();
        }
    }
}
